import 'package:eh_mobile/global.dart';
import 'package:jpush_flutter/jpush_flutter.dart';
import 'package:logger/logger.dart';

// 推送管理类
class AppPush {
  static final AppPush instance = AppPush._internal();

  factory AppPush() {
    return instance;
  }

  final JPush _jpush = JPush();

  final Logger _logger = Logger();

  AppPush._internal() {
    //addEventHandler 方法建议放到 setup 之前，其他方法需要在 setup 方法之后调用
    _jpush.addEventHandler(
      // 接收通知回调方法。
      onReceiveNotification: (Map<String, dynamic> message) async {
        _logger.d("收到推送消息: $message");
      },
      // 点击通知回调方法。
      onOpenNotification: (Map<String, dynamic> message) async {
        _logger.d("通知被点击: $message");
      },
      // 接收自定义消息回调方法。
      onReceiveMessage: (Map<String, dynamic> message) async {
        _logger.d("接收到自定义消息: $message");
      },
    );

    _jpush.setup(
      appKey: "483b776f7d14b85ed3d4dc19",
      channel: "app",
      production: Global.isRelease,
      debug: false, // 设置是否打印 debug 日志
    );
  }

  // 初始化推送
  void init() {}

  // 获取 registrationId，这个 JPush 运行通过 registrationId 来进行推送.
  Future<String> registrationId() async {
    return await _jpush.getRegistrationID();
  }

  // 设置别名，极光后台可以通过别名来推送，一个 App 应用只有一个别名，一般用来存储用户id。
  void setAlias(String aias) {
    _jpush.setAlias(aias);
  }

  // 停止推送
  Future<String> stopPush() async {
    return await _jpush.stopPush();
  }

  // 调用 stopPush 后，可以通过 resumePush 方法恢复推送。
  Future<String> resumePush() async {
    return await _jpush.resumePush();
  }

  // 清理通知栏所有通知
  void clearAllNotifications() async {
    _jpush.clearAllNotifications;
  }

  // 设置小红点
  void setBadge(int badge) async {
    await _jpush.setBadge(badge);
  }
}
